package com.itcm.skymail.cart.controller;

import com.itcm.skymail.cart.interceptor.CartInterceptor;
import com.itcm.skymail.cart.service.CartService;
import com.itcm.skymail.cart.to.UserInfoTo;
import com.itcm.skymail.cart.vo.CartItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.concurrent.ExecutionException;

/**
 * 描述:
 *
 * @author cm_fighting
 * @create 2020-11-23 9:51 上午
 */
@Controller
public class CartController {

    @Autowired
    private CartService cartService;

    /*
        分析：购物车分为临时购物车和用户购物车，即当用户登录时 返回的就是用户对应的购物车
             当用户未登录，也可以操作加购物车，即为临时购物车，此时因为是未登录，不能拿到用户真实购物车，所以利用浏览器cookie，
             设置一个 user-key属性标识用户身份，且过期设为一个月。
             未登录：第一次访问时，即没有user-key 不用查临时购物车数据，且要生成一个user-key
                    当有user-key数据时，去缓存（本项目采用redis），根据user-key的值获取临时购物车数据
             登录后：查出用户购物车数据，并将临时购物车数据合并到用户购物车，并清空临时购物车

             这些判断操作、创建user-key可以使用拦截器来做 interceptor.CartInterceptor
     */
    @GetMapping("/cart.html")
    public String cartListPage(HttpSession session) {
        // 只要是同一线程 都可以拿到拦截器中设置的userInfo信息
        UserInfoTo userInfoTo = CartInterceptor.threadLocal.get();
        Long userId = userInfoTo.getUserId();
        String userKey = userInfoTo.getUserKey();
        return "index";
    }

    /*
     * 添加到购物车
     */
    @GetMapping("/addToCart")
    public String addToCart(@RequestParam("skuId") Long skuId,
                            @RequestParam("num") Integer num,
                            Model model) throws ExecutionException, InterruptedException {
        CartItem item = cartService.addCart(skuId, num);
        model.addAttribute("item", item);
        return "success";
    }
}
